#include <algorithm>
#include <functional>
#include <queue>
//思路就是便利每一个活动 只要不相交就不用增加主持人
//我们的大根堆中存储的是已经分配支持人活动的右端点
//每次新来一个回答 只要左端点大于堆中的最小的右端点 说明就不用增加主持人 该活动可以跟在堆中最小右端点的后面 
//反之就要新开一个支持人 并把此时的右端点的值插入
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 计算成功举办活动需要多少名主持人
     * @param n int整型 有n个活动
     * @param startEnd int整型vector<vector<>> startEnd[i][0]用于表示第i个活动的开始时间，startEnd[i][1]表示第i个活动的结束时间
     * @return int整型
     */
    int minmumNumberOfHost(int n, vector<vector<int> >& startEnd) 
    {
        sort(startEnd.begin(),startEnd.end());
        int ret=1;
        priority_queue<int,vector<int>,greater<int>>q;
        q.push(startEnd[0][1]);
        for(int i=1;i<startEnd.size();i++)
        {
            int t=q.top();
            int left=startEnd[i][0];
            int right=startEnd[i][1];
            if(left<t)
            {
                ret++;
                q.push(right);
            }
            else 
            {
                q.pop();
                q.push(right);
            }
        }
       return ret;

    }
};